const fp = require('lodash/fp')
const {Maybe, Container} = require('./support')
let maybe = Maybe.of([5,6,1])
// 练习1：使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
let ex1 = (y) => {
    // 你需要实现的函数
    return maybe.map(value => fp.map(x => fp.add(x, y), value))
}

console.log(ex1(10))

// 练习2：</font> 实现一个函数ex2，能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])
let ex2 = () => {
    // 你需要实现的函数

    // 第一种方式
    // return fp.first(xs._value)

    // 第二种方式
    let first = undefined
    xs.map(v => {
        first = fp.first(v)
        return v
    })
    return first
}

console.log(ex2())

// 练习3： 实现一个函数ex3，使用safeProp和fp.first找到user的名字的首字母

let safeProp = fp.curry(function (x, o) {
    return Maybe.of(o[x])
})
let user = {id: 2, name: 'Albert'}
let ex3 = () => {
    // 你需要实现的函数
    let maybe = safeProp('name',user)

    let userNameFirst = undefined
    maybe.map(v => {
        userNameFirst = fp.first(v)
        return v
    })
    return userNameFirst
}

console.log(ex3())



// 练习4： 使用Maybe重写ex4，不要有if语句

// let ex4 = function (n) {
//     if (n) {
//         return parseInt(n)
//     }
// }

let ex4 = function (n) {
    return Maybe.of(n).map(v => parseInt(v))._value
}

console.log(ex4(null))

